<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>数据的加密和解密算法 | 素墨文胤</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="客户端用户隐私数据传输加/解密方案（草案）一、起因与概论为避免网路上明文传输，增强对用户隐私的保护，故制定本方案。本方案可以概括为：密钥随机并经RSA加密的AES加密算法。主体加密是AES加密，AES密码经RSA加密。本方案加密的主体是客户端和服务端传输过程中的用户隐私数据，即需要验证用户ID和Token的数据，非用户隐私数据不做加密处理。
二、方案要点">
<meta property="og:type" content="article">
<meta property="og:title" content="数据的加密和解密算法">
<meta property="og:url" content="http://godera.org/2015/05/08/数据的加密和解密算法/index.html">
<meta property="og:site_name" content="素墨文胤">
<meta property="og:description" content="客户端用户隐私数据传输加/解密方案（草案）一、起因与概论为避免网路上明文传输，增强对用户隐私的保护，故制定本方案。本方案可以概括为：密钥随机并经RSA加密的AES加密算法。主体加密是AES加密，AES密码经RSA加密。本方案加密的主体是客户端和服务端传输过程中的用户隐私数据，即需要验证用户ID和Token的数据，非用户隐私数据不做加密处理。
二、方案要点">
<meta property="og:image" content="http://godera.org/images/encryptionFlow.jpg">
<meta property="og:image" content="http://godera.org/images/iOSEncryptedCode.png">
<meta property="og:image" content="http://godera.org/images/encrypedTimes.jpg">
<meta property="og:updated_time" content="2015-11-18T03:22:11.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="数据的加密和解密算法">
<meta name="twitter:description" content="客户端用户隐私数据传输加/解密方案（草案）一、起因与概论为避免网路上明文传输，增强对用户隐私的保护，故制定本方案。本方案可以概括为：密钥随机并经RSA加密的AES加密算法。主体加密是AES加密，AES密码经RSA加密。本方案加密的主体是客户端和服务端传输过程中的用户隐私数据，即需要验证用户ID和Token的数据，非用户隐私数据不做加密处理。
二、方案要点">
<meta name="twitter:image" content="http://godera.org/images/encryptionFlow.jpg">
  
  
    <link rel="icon" href="/favicon.png">
  

  <link rel="stylesheet" href="/css/style.css">
  
    <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  
  
    <link rel="stylesheet" href="/scrollLoading/style.css">
  
  


  

  
    <link href='//fonts.useso.com/css?family=Titillium+Web:300,400,600' rel='stylesheet' type='text/css'>
    <link href="//fonts.useso.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/font-awesome/css/font-awesome.min.css">
</head>

<body>
  <div id="wrap">
    <header id="header">
  <div id="header-outer" class="outer">
    <div class="container">
      <div class="container-inner">
        <div id="header-title">
          <h1 class="logo-wrap">
            <a href="/" class="logo"></a>
          </h1>
          
            <h2 class="subtitle-wrap">
              <p class="subtitle">一日心静一日仙，不以神力乱人间。</p>
            </h2>
          
        </div>
        <div id="header-inner" class="nav-container">
          <a id="main-nav-toggle" class="nav-icon fa fa-bars"></a>
          <div class="nav-container-inner">
            <ul id="main-nav">
              
                <li class="main-nav-list-item" ><a class="main-nav-list-link" href="/">Home</a></li>
              
                    <ul class="main-nav-list"><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/JS/">JS</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/Unix-Linux/">Unix_Linux</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/iOS/">iOS</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/哲学辨思/">哲学辨思</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/数据库/">数据库</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/文字文化/">文字文化</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/生活感悟/">生活感悟</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/随心随性/">随心随性</a></li><li class="main-nav-list-item"><a class="main-nav-list-link" href="/categories/默认标签/">默认标签</a></li></ul>
                  
                <li class="main-nav-list-item" ><a class="main-nav-list-link" href="/about/index.html">About</a></li>
              
            </ul>
            <nav id="sub-nav">
              <div id="search-form-wrap">
                
                  <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" results="0" class="search-form-input" placeholder="Search"><input type="hidden" name="sitesearch" value="http://godera.org"></form>
                
              </div>
            </nav>
          </div>
        </div>
      </div>
    </div>
  </div>
</header>
    <div class="container">
      <div class="main-body container-inner">
        <div class="main-body-inner">
          <section id="main">
            <div class="main-body-header">

              <h1 class="header"><a class="page-title-link" href="/categories/iOS/">iOS</a></h1>
            </div>
            <div class="main-body-content">
              
  <article id="post-数据的加密和解密算法" class="article article-single article-type-post" itemscope itemprop="blogPost">
    <div class="article-inner">
      <!--  -->
      
        <header class="article-header">
          
  
    <h1 class="article-title" itemprop="name">
      数据的加密和解密算法
    </h1>
  

        </header>
      
      <p class="article-byline">
        <a href="/2015/05/08/数据的加密和解密算法/" class="article-date">
  <time datetime="2015-05-08T11:06:26.000Z" itemprop="datePublished">2015-05-08</time>
</a>
      </p>
      <div class="article-entry" itemprop="articleBody">
        <p>客户端用户隐私数据传输加/解密方案（草案）<br>一、起因与概论<br>为避免网路上明文传输，增强对用户隐私的保护，故制定本方案。<br>本方案可以概括为：密钥随机并经RSA加密的AES加密算法。<br>主体加密是AES加密，AES密码经RSA加密。<br>本方案加密的主体是客户端和服务端传输过程中的用户隐私数据，即需要验证用户ID和Token的数据，非用户隐私数据不做加密处理。</p>
<p>二、方案要点<br><a id="more"></a><br>方案目前仅针对文本参数加密，图片、音频、视频加密尚在调研，具体在客户端请求统一成一个出口之后再行调研、实施；<br>AES密钥用256位，RSA用1024位；<br>AES密钥由客户端随机生成 并注册到服务端；<br>AES密钥在APP运行期间只能生成一次，是单例；<br>AES密钥传输的时候要经RSA加密，RSA密钥对是预先生成的，分别放在两端，用于第一次加密；安卓和iOS各用一对；安卓需要通过措施保证密钥的安全性；<br>用户打开APP后的每一个请求都可能负有密钥注册的责任；<br>      服务端需要建立起 设备ID+用户ID+用户Token 联合键和AES密钥的对应关系；<br>      服务端AES密钥存储建议用RSA加密后数据而非明文；<br>      客户端的AES密钥需要用RSA加密后数据；<br>AES密钥的有效期是 某个设备上的APP的运行期；<br>用户不需要使用APP时需反注册密钥，必传参数是 _di、_ui、_tk；<br>服务端也可定期（每天？）清理失效的密钥（注册了一个月的？）<br>客户端向服务端注册AES密钥的前提条件是：设备ID+用户ID+用户Token都存在，也就是说客户端需要有一个判断是否可以加密的函数，函数体是判断设备ID+用户ID+用户Token三者是否都合法，如果合法就加密传输，如果不合法就不用加密传输；<br>请求参数字典结构如下：<br>    <code>{  
    _di = 经RSA加密后的设备唯一ID；（必传）  
    _ui = 经RSA加密后的用户ID；（必传）  
    _tk = 经RSA加密后的用户Token；（必传）  
    _p = 请求参数整体AES加密后的数据；（必传）  
    _k = 经RSA加密后的AES密钥（在服务端密钥注册成功后即不再传）  
    }</code><br>服务端在注册AES Key的时候需要验证用户的权限，保证合法注册。<br>响应结构如下：<br>    <code>{  
    _r = 服务端响应整体AES加密后的数据；（必传）  
    _kr = 1或2（1代表注册成功，2代表失败，请求字典无 _ek 参数即不需传）  
    }</code><br>服务端在注册失败时，即可判定用户权限受限，返回错误信息。<br>_p、_r均为关键字，是服务端、客户端判断数据是否加密的标识。下划线代表特殊用途参数。<br>加密请求另起一个类，以前的请求逐步替换成加密请求。</p>
<p>三、方案流程图<br><img src="/images/encryptionFlow.jpg" alt="方案流程图"> </p>
<p>四、AES密钥生成（以iOS为例）<br><img src="/images/iOSEncryptedCode.png" alt="AES密钥生成_iOS"> </p>
<p>附录1、加密方式简略介绍<br>一、对称加密<br>1、介绍：<br>　　对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法或单密钥算法。它要求发送方和接收方在安全通信之前，商定一个密钥。对称算法的安全性依赖于密钥，泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密，所以密钥的保密性对通信性至关重要。<br>2、优点：<br>　　对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。<br>3、缺点：<br>　　不足之处是，交易双方都使用同样钥匙，安全性得不到保证。此外，每对用户每次使用对称加密算法时，都需要使用其他人不知道的惟一钥匙，这会使得发收信双方所拥有的钥匙数量呈几何级数增长，密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难，主要是因为密钥管理困难，使用成本较高。而与公开密钥加密算法比起来，对称加密算法能够提供加密和认证却缺乏了签名功能，使得使用范围有所缩小。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。<br>4、常用算法<br>AES：　　在密码学中又称Rijndael加密法，是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES，已经被多方分析且广为全世界所使用。经过五年的甄选流程，高级加密标准由美国国家标准与技术研究院（NIST）于2001年11月26日发布于FIPS PUB 197，并在2002年5月26日成为有效的标准。2006年，高级加密标准已然成为对称密钥加密中最流行的算法之一。</p>
<p>二、非对称加密<br>1、介绍：<br>　　与对称加密算法不同，非对称加密算法需要两个密钥：公开密钥（publickey）和私有密钥（privatekey）。公开密钥与私有密钥是一对，如果用公开密钥对数据进行加密，只有用对应的私有密钥才能解密；如果用私有密钥对数据进行加密，那么只有用对应的公开密钥才能解密。<br>2、优点：<br>　　非对称加密与对称加密相比，其安全性更好：对称加密的通信双方使用相同的密钥，如果一方的密钥遭泄露，那么整个通信就会被破解。而非对称加密使用一对密钥，一个用来加密，一个用来解密，而且公钥是公开的，密钥是自己保存的，不需要像对称加密那样在通信之前要先同步密钥。<br>3、缺点：<br>　　非对称加密的缺点是加密和解密花费时间长、速度慢，只适合对少量数据进行加密。<br>4、常用算法<br>RSA：　　RSA是目前最有影响力的公钥加密算法，它能够抵抗到目前为止已知的绝大多数密码攻击，已被ISO推荐为公钥数据加密标准。<br>今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止，世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长，用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天，RSA加密安全性受到了挑战。<br>RSA算法基于一个十分简单的数论事实：将两个大素数相乘十分容易，但是想要对其乘积进行因式分解却极其困难，因此可以将乘积公开作为加密密钥。在公开密钥加密和电子商业中RSA被广泛使用。</p>
<p>附录2：业界流行客户端加密方式汇总<br>1、微信公众号：AES加密<br>2、微信支付：RSA加密<br>3、微信IM：基于RSA加密、AES随机密钥加密；<br>其中RSA是1024位，AES是128位。<br>是社交软件的主流加密方式。<br>4、QQ：先后用过TEA和RSA两种加密方式，RSA是针对每个对话都会生成一对钥匙的。<br>5、支付宝：<br>　　1)      一次一密的公钥对<br>　　每次登陆都由服务器生成一公钥对(private_key, public_key),浏览器从服务器获取public_key,用它加密口令。这样口令密文每次都在变，只有拥有私钥的服务器才能解密口令。韩国某知名游戏的网页登陆采用过这种登陆方法。<br>　　2)      RSA公钥加密<br>　　学习SSL，由客户端生成随机密钥Key，此key用服务器的公钥加密后发送到服务器，服务器用私钥解密得到密钥key。服务器和浏览器通过这个随机密钥key来保护登陆口令。<br>6、淘宝：用md5、hmac</p>
<p>附录3：设备AES256加密速度比较<br>测试文件为45.1M的视频数据<br>安卓的未补全<br><img src="/images/encrypedTimes.jpg" alt="方案流程图"> </p>
<p>同步时的zip包加密</p>

      </div>
      <footer class="article-footer">
        <a data-url="http://godera.org/2015/05/08/数据的加密和解密算法/" data-id="ciw7o5qjz00633ref0mftlry8" class="article-share-link"><i class="fa fa-share"></i>Share</a>
        
        
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/iOS/">iOS</a></li></ul>

      </footer>
    </div>
  </article>
  
  


<!--高速版-->
<div id="SOHUCS"></div>
<script charset="utf-8" type="text/javascript" src="http://changyan.sohu.com/upload/changyan.js" ></script>
<script type="text/javascript">
    window.changyan.api.config({
        appid: 'cys5Qvajj',
        conf: 'prod_62197afb84b42bd16c642feedaaef9f1'
    });
</script>   

            </div>
          </section>
          <aside id="sidebar">
  <a class="sidebar-toggle" title="Expand Sidebar"><i class="toggle icon"></i></a>
  <div class="sidebar-top">
    <p>follow:</p>
    <ul class="social-links">
      
        <li><a class="social-tooltip" title="github" href="https://github.com/godera" target="_blank"><i class="icon fa fa-github"></i></a></li>
      
    </ul>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/2015/05/27/Cocoa-编码规范0-1/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">newer</strong>
      <p class="article-nav-title">
        
          Cocoa 编码规范0.1
        
      </p>
      <i class="icon fa fa-chevron-right" id="icon-chevron-right"></i>
    </a>
  
  
    <a href="/2015/05/06/iOS判断类有无和方法响应否的办法/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">older</strong>
      <p class="article-nav-title">iOS判断类有无和方法响应否的办法</p>
      <i class="icon fa fa-chevron-left" id="icon-chevron-left"></i>
    </a>
  
</nav>

  
  <div class="widgets-container">
    
      
  <div class="widget-wrap">
    <h3 class="widget-title">recents</h3>
    <div class="widget">
      <ul id="recent-post" class="">
        
          <li>
            
            <div class="item-thumbnail">
              
<a href="/2016/11/30/Markdown-技巧汇总（持续帖）/" class="thumbnail">
  
    <span class="thumbnail-image thumbnail-none"></span>
  
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category"><a class="article-category-link" href="/categories/iOS/">iOS</a></p>
              <p class="item-title"><a href="/2016/11/30/Markdown-技巧汇总（持续帖）/" class="title">Markdown 技巧汇总（持续帖）</a></p>
              <p class="item-date"><time datetime="2016-11-30T05:10:18.000Z" itemprop="datePublished">2016-11-30</time></p>
            </div>
          </li>
        
          <li>
            
            <div class="item-thumbnail">
              
<a href="/2016/11/27/CocoaPods-指南/" class="thumbnail">
  
    <span class="thumbnail-image thumbnail-none"></span>
  
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category"><a class="article-category-link" href="/categories/iOS/">iOS</a></p>
              <p class="item-title"><a href="/2016/11/27/CocoaPods-指南/" class="title">CocoaPods 指南</a></p>
              <p class="item-date"><time datetime="2016-11-27T11:03:26.000Z" itemprop="datePublished">2016-11-27</time></p>
            </div>
          </li>
        
          <li>
            
            <div class="item-thumbnail">
              
<a href="/2016/04/16/OC-和-Swift-的混用方法/" class="thumbnail">
  
    <span class="thumbnail-image thumbnail-none"></span>
  
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category"><a class="article-category-link" href="/categories/iOS/">iOS</a></p>
              <p class="item-title"><a href="/2016/04/16/OC-和-Swift-的混用方法/" class="title">OC 和 Swift 的混用方法</a></p>
              <p class="item-date"><time datetime="2016-04-16T11:11:42.000Z" itemprop="datePublished">2016-04-16</time></p>
            </div>
          </li>
        
          <li>
            
            <div class="item-thumbnail">
              
<a href="/2016/04/11/ReactiveCocoa-简单总结/" class="thumbnail">
  
    <span class="thumbnail-image thumbnail-none"></span>
  
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category"><a class="article-category-link" href="/categories/iOS/">iOS</a></p>
              <p class="item-title"><a href="/2016/04/11/ReactiveCocoa-简单总结/" class="title">ReactiveCocoa 简单总结</a></p>
              <p class="item-date"><time datetime="2016-04-11T03:00:29.000Z" itemprop="datePublished">2016-04-11</time></p>
            </div>
          </li>
        
          <li>
            
            <div class="item-thumbnail">
              
<a href="/2016/04/09/从汉语字面理解-观察者模式-和-订阅者模式-的区别/" class="thumbnail">
  
    <span class="thumbnail-image thumbnail-none"></span>
  
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category"><a class="article-category-link" href="/categories/Unix-Linux/">Unix_Linux</a></p>
              <p class="item-title"><a href="/2016/04/09/从汉语字面理解-观察者模式-和-订阅者模式-的区别/" class="title">从汉语字面理解 观察者模式 和 订阅者模式 的区别</a></p>
              <p class="item-date"><time datetime="2016-04-09T10:19:20.000Z" itemprop="datePublished">2016-04-09</time></p>
            </div>
          </li>
        
      </ul>
    </div>
  </div>

    
      
  <div class="widget-wrap widget-list">
    <h3 class="widget-title">archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/11/">November 2016</a><span class="archive-list-count">2</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/04/">April 2016</a><span class="archive-list-count">3</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/03/">March 2016</a><span class="archive-list-count">4</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/02/">February 2016</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/01/">January 2016</a><span class="archive-list-count">2</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/12/">December 2015</a><span class="archive-list-count">3</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/11/">November 2015</a><span class="archive-list-count">6</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/10/">October 2015</a><span class="archive-list-count">2</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/09/">September 2015</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/08/">August 2015</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/06/">June 2015</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/05/">May 2015</a><span class="archive-list-count">4</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/04/">April 2015</a><span class="archive-list-count">3</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/03/">March 2015</a><span class="archive-list-count">36</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/02/">February 2015</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/01/">January 2015</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/10/">October 2014</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2012/06/">June 2012</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2011/10/">October 2011</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2010/06/">June 2010</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2008/08/">August 2008</a><span class="archive-list-count">1</span></li></ul>
    </div>
  </div>


    
      
  <div class="widget-wrap widget-float">
    <h3 class="widget-title">tag cloud</h3>
    <div class="widget tagcloud">
      <a href="/tags/JS/" style="font-size: 10px;">JS</a> <a href="/tags/Unix-Linux/" style="font-size: 14px;">Unix_Linux</a> <a href="/tags/iOS/" style="font-size: 20px;">iOS</a> <a href="/tags/哲学辨思/" style="font-size: 16px;">哲学辨思</a> <a href="/tags/数据库/" style="font-size: 10px;">数据库</a> <a href="/tags/文字文化/" style="font-size: 18px;">文字文化</a> <a href="/tags/生活感悟/" style="font-size: 14px;">生活感悟</a> <a href="/tags/随心随性/" style="font-size: 12px;">随心随性</a> <a href="/tags/默认标签/" style="font-size: 10px;">默认标签</a>
    </div>
  </div>


    
      
  <div class="widget-wrap widget-list">
    <h3 class="widget-title">links</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="http://hexo.io">Hexo</a>
          </li>
        
      </ul>
    </div>
  </div>


    
  </div>
</aside>
        </div>
      </div>
    </div>
    <footer id="footer">
  
  <div class="container">
    <div class="container-inner">
      <a id="back-to-top" href="javascript:;"><i class="icon fa fa-angle-up"></i></a>
      <div class="credit">
        <h1 class="logo-wrap">
          <a href="/" class="logo"></a>
        </h1>
        <p>&copy; 2016 梁逊</p>
        <p>Powered by <a href="//hexo.io/" target="_blank">Hexo</a>. Theme by <a href="//github.com/ppoffice" target="_blank">PPOffice</a></p>
      </div>
    </div>
  </div>
</footer>
    


  <script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>



  <script src="/fancybox/jquery.fancybox.pack.js"></script>



  <script src="/scrollLoading/jquery.scrollLoading.js"></script>
  <script src="/scrollLoading/main.js"></script>




<script src="/js/html-patch.js"></script>
<script src="/js/script.js"></script>

  </div>
</body>
</html>
